package controller;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Random;
import java.util.StringTokenizer;

import javax.swing.JOptionPane;

import sun.audio.AudioData;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
import sun.audio.ContinuousAudioDataStream;
import view.ClienteResultado;
import view.Utils;



public class ClienteSocket extends Thread {
	
	InputStream soundFile = null;
	AudioStream as = null;
	ContinuousAudioDataStream cas = null;
	AudioData audioData = null;
	
	Socket socket = null;
    PrintWriter out = null;
    BufferedReader in = null;
    Random timeGenerator = new Random();
    Integer time = 1;
    StringTokenizer tokenizer;
    
    String ipServer = "";
    
    String placa = "";
    String modelo = "";
    String fabricante = "";
    String cor = "";
    String ano = "";
    String ipva = "";
    String multa = "";
    String roubo = "";
    
	@SuppressWarnings("deprecation")
	@Override
	public void run() {
		
		try {
			//socket = new Socket("187.67.51.138",7000);
			//out = new PrintWriter(socket.getOutputStream(), true);
	       // in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
	        /*soundFile = new FileInputStream("sound/sirene.mp3");
	        as = new AudioStream(soundFile);
	        audioData = as.getData();
	        cas = new ContinuousAudioDataStream(audioData);*/
			
			ipServer = JOptionPane.showInputDialog(null, "Digite o IP do servidor:", "Entrada de Configuracoes", JOptionPane.QUESTION_MESSAGE);
			
			while (true) {
				socket = new Socket(ipServer,7000);
				out = new PrintWriter(socket.getOutputStream(), true);
		        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				System.out.println("Socket aberto! ");
		        
				// busy waiting...
				time = timeGenerator.nextInt(5) + 1;
				System.out.println("TEMPO DE ESPERA: " + (time) + " s");
				sleep(time * 1000);				
				out.println(randomPlaca());
				
				String recebido = in.readLine();
				if (recebido != null) {
					//System.out.println(recebido);
					tokenizer = new StringTokenizer(recebido, "#");
					tokenizer.nextToken(); // id do banco
					
					placa = tokenizer.nextToken();
					modelo = tokenizer.nextToken();
					fabricante = tokenizer.nextToken();
					cor = tokenizer.nextToken();
					ano = tokenizer.nextToken();
					ipva = tokenizer.nextToken();
					multa = tokenizer.nextToken();
					roubo = tokenizer.nextToken();
					
					ClienteResultado.setFoto(modelo, cor);
					ClienteResultado.setPlaca(placa);
					ClienteResultado.setModelo(modelo);
					ClienteResultado.setFabricante(fabricante);
					ClienteResultado.setCor(cor);
					ClienteResultado.setAno(ano);
					ClienteResultado.setIpvaAtrasado(ipva);
					ClienteResultado.setMultado(multa);
					ClienteResultado.setRoubado(roubo);
					
					/*if (roubo.equals("1") || multa.equals("1") || ipva.equals("1")) {
						AudioPlayer.player.start(cas);
					} else {
						if (AudioPlayer.player.isAlive()) {
							AudioPlayer.player.stop(cas);
						}
					}*/
					
					if (roubo.equals("1")) {
						Utils.mensagemAviso("CARRO ROUBADO!\nPare-o imediatamente!");
					} else {
						if (multa.equals("1")) {
							Utils.mensagemAviso("Carro com multas atrasadas!\nTomar as atitudes cabiveis.");
						} else {
							if (ipva.equals("1")) {
								Utils.mensagemAviso("Carro com IPVA atrasado!\nEncoste-o e aplique a multa.");
							}
						}
					}
				}else{
					System.out.println("RECEBENDO NULL");
				}
			}
			
		} catch (IOException e) {
			System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket.");
		} catch (InterruptedException e) {
			System.out.println("Erro ao fazer a thread dormir");
			e.printStackTrace();
		} finally {
			try {
				socket.close();
				System.out.println("Socket fechado! ");
			} catch (IOException e) {
				System.out.println("Algum problema ocorreu ao encerrar o socket no cliente.");				
			}
		}
	}

	private static Integer randomPlaca() {
		Random randomGenerator = new Random();
		Integer randomInt = randomGenerator.nextInt(1000) + 1;
		return randomInt;
	}
	
}
